package model;

import java.awt.Color;

/**
 * Cette classe représente les Cartes Offensives du jeu. Elle hérite des
 * méthodes de la classe Carte et implémente la classe ObjetAttaquable.
 *
 * @author Antoine Thorr, Joana Santos, Samy Rida, Vicky Ngo Pagbe
 */
public class CarteOffensive extends Carte implements ObjetAttaquable {

    private int pointAttaque;
    private int pointDeVie;
    private int pvBak;
    private Etat etat;
    private boolean modeAttaque;

    /**
     * Constructeur de la classe CarteOffensive. Créer une carte et lui affecte
     * un nom, un coût, un type, des points d'attaque, et des points de vie. Elle
     * lui affecte sa couleur puis met son mode d'attaque à false.
     *
     * @param cout : Coût de la carte
     * @param nom : Nom de la carte
     * @param type : Type de la carte
     * @param pt : Point d'attaque de la carte
     * @param pv : point de vie de la carte
     */
    public CarteOffensive(int cout, String nom, Type type, int pt, int pv) {
        super(cout, nom, type);
        this.pointAttaque = pt;
        this.pointDeVie = pv;
        this.pvBak = pv;
        this.etat = Etat.enAttente;
        this.modeAttaque = false;
        super.setC(new Color(158, 11, 15));
    }

    /**
     * Permet de définir les points de vie de la Carte
     *
     * @param pointDeVie Nouveau point de vie
     */
    public void setPointDeVie(int pointDeVie) {
        this.pointDeVie = pointDeVie;
    }

    /**
     * Retourne les points d'attaques
     *
     * @return Point d'attaques
     */
    public int getPointAttaque() {
        return this.pointAttaque;
    }

    /**
     * Permet de définir les points d'attaques de la carte.
     * @param pointAttaque : nouveau point d'attaque.
     */
    public void setPointAttaque(int pointAttaque) { // Utilité ? Que dans le cas où une carte diminuerait les PA d'une autre..
        this.pointAttaque = pointAttaque;
    }

    /**
     * Retourne l'attitude de la carte.
     * @return "Offensive"
     */
    @Override
    public String getAttitude() {
        return "offensive";
    }

    /**
     * Retourne l'etat de la carte.
     *
     * @return Soit enAttente, sleep ou aAttaque.
     */
    public Etat getEtat() {
        return etat;
    }

    /**
     * PErmet de définir le nouvel état de la Carte
     *
     * @param etat
     */
    public void setEtat(Etat etat) {
        this.etat = etat;
    }

    /**
     * Redéfinition de la méthode toString pour retourner l'affichage des points
     * d'attaques de la carte.
     *
     * @return
     */
    @Override
    public String toString() {
        return "-" + this.pointAttaque;
    }

    /**
     * Retourne le nom de la classe
     *
     * @return CarteOffensive
     */
    @Override
    public String getNomClasse() {
        return "CarteOffensive";
    }

    /**
     * Retourne les points de vie de la Carte
     *
     * @return un entier correspondant à la vie de la carte
     */
    @Override
    public int getVie() {
        return this.pointDeVie;
    }
    
    /**
     * Retourne les points de vie initiaux de la Carte
     *
     * @return un entier correspondant à la vie initiale de la carte
     */
    @Override
    public int getVieBak() {
        return this.pvBak;
    }

    /**
     * Permet de définir la vie de la carte
     *
     * @param v : Nouvelle vie de la carte
     */
    @Override
    public void setVie(int v) {
        this.pointDeVie = v;
    }

    /**
     * Retourne si le mode Attaque est activé.
     *
     * @return True si le mode attaque est activé, faux sinon.
     */
    public boolean isModeAttaque() {
        return modeAttaque;
    }

    /**
     * PErmet de définir si le mode Attaque est activé.
     *
     * @param modeAttaque True pour activer le mode, Faux sinon.
     */
    public void setModeAttaque(boolean modeAttaque) {
        this.modeAttaque = modeAttaque;
    }

}
